<?php
/**
 * File Name...: helpers\array.php
 * Framework...: Blackbird Framework
 * Author......: KnKill, 2010 (c) KnKill Corporation
 */



/**
 * @package Blackbird Framework
 * @subpackage Helpers
 * @since 0.2
 */
class ArrayHelpers
{


/**
 * @static
 * @access public
 * @since 0.2
 * @param string $item
 * @param array $array
 * @param mixed $default
 * @return mixed
 */
static public function element($item, $array, $default = false) {
    // Если выбранного элемента в массиве не найдено или этот элемент
    // является пустой строкой - возвращаем значение по умолчанию
    if (! isset($array[$item])) {
        return $default;
    }
    return $array[$item];
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param array $array
 * @return mixed
*/
static public function random_element($array) {
    // Если переданный параметр не является массивом -
    // возвращаем его в таком же виде
    if (! is_array($array)) {
        return $array;
    }
    return $array[array_rand($array)];
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param array $array
 * @return bool
*/
static public function is_assoc($array) {
    // Проверяем массив на ассоциативнорсть
    $result = (array_keys($array) != array_keys(array_keys($array)));
    return $result;
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param array $array
 * @param bool $includeSpaces
 * @return array
 */
static public function trim_elements($array, $include_spaces = true) {
    foreach ($array as $key => $value) {
        if (is_null($value) || ($value == '' && $include_spaces)) {
            unset($array[$key]);
        }
    }
    return $array;
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param string $element
 * @param array $array
 * @return bool
*/
static public function in_multiarray($element, $array) {
    $top = sizeof($array) - 1;
    $bottom = 0;
    while($bottom <= $top) {
        if($array[$bottom] == $element) {
            return true;
        } else {
            if(is_array($array[$bottom])) {
                // Рекурсия она такая... рекурсивная чтоли
                if(self::in_multiarray($element, ($array[$bottom]))) {
                    return true;
                }
            }
        }
        $bottom++;
    }
    return false;
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param array $needles
 * @param array $haystack
 * @return bool
*/
static public function array_in_array($needles, $haystack) {
    foreach ($needles as $needle) {
        if (in_array($needle, $haystack)) {
            return true;
        }
    }
    return false;
}


/**
 * @static
 * @access public
 * @since 0.2
 * @param string $referencia
 * @param array $array
 * @return bool
 */
static public function in_array_like($referencia, $array) {
    foreach($array as $element) {
        // Ищем указанную под-строку в элементе
        if (strstr($referencia, $element)) {
            return true;
        }
    }
    return false;
}


// End Of Helper "Array"
}